package com.eliaukjq.xunlianying;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2024/7/19 - 10:12
 */
public class AtomicitySolution01 {
    private static int counter = 0;

    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter++;
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter++;
            }
        });

        /**
         * 启动线程1。这里没有详细的注释，因为启动线程的操作是显而易见的。
         */
        thread1.start();
        /**
         * 启动线程2。同样，这里没有详细的注释，因为操作直观明了。
         */
        thread2.start();
        /**
         * 等待线程1完成。在这段代码中，主线程将暂停执行，直到线程1完成它的执行。
         * 这种方式确保了线程1的执行在线程2之后，对于需要特定执行顺序的场景来说是必要的。
         */
        thread1.join();
        /**
         * 等待线程2完成。类似于对线程1的等待，这里确保了线程2执行完毕后，主线程才能继续。
         * 这对于保证多线程执行顺序和依赖关系非常重要。
         */
        thread2.join();


        System.out.println("Final counter value: " + counter);
    }
}
